package routes

import (
	"net/http"

	v1 "gitee.com/daonna/collab-manage-system/api/v1"
	"gitee.com/daonna/collab-manage-system/middleware"

	"github.com/gin-gonic/gin"
)

func NewRouter() *gin.Engine {
	r := gin.Default()
	r.Use(middleware.Cors())
	r.StaticFS("/static", http.Dir("./static"))

	api := r.Group("/api/v1")
	{

		// // 用户操作
		api.POST("user/login", v1.Login)
		api.POST("user/logout", v1.UserLogout)
		api.POST("user/register", v1.RegisterByEmail)
		api.POST("user/forgot-password", v1.ForgotPassword)
		api.GET("user/list", v1.GetUserList)

		// api.GET("user/verify", v1.VerifyToken)
		// 基础检查接口
		r.GET("/ping", v1.Ping)

		// 需要登陆保护
		authed := api.Group("/")
		authed.Use(middleware.AuthMiddleware())
		{
			chat := authed.Group("chat")
			{
				// 会话管理
				chat.GET("/conversations", v1.ListConversations)        // 获取用户的所有会话
				chat.GET("/conversation/:id", v1.GetConversation)       // 获取单个会话详情
				chat.POST("/conversation", v1.CreateConversation)       // 创建新会话（单聊或群聊）
				chat.PUT("/conversation/:id", v1.UpdateConversation)    // 更新会话信息（主要用于群聊）
				chat.DELETE("/conversation/:id", v1.DeleteConversation) // 删除会话

				// 消息管理
				chat.POST("/message", v1.SendMessage)                  // 发送消息
				chat.GET("/messages/:conversationId", v1.ListMessages) // 获取会话中的消息

				// 群组成员管理

				chat.POST("/group", v1.CreateGroup)                            // 创建群组
				chat.DELETE("/group/:id", v1.DeleteGroup)                      //删除群组
				chat.PUT("/group/:id", v1.UpdateGroup)                         //修改群组
				chat.GET("/group/:id", v1.GetGroup)                            //查看群组
				chat.GET("/groups", v1.ListGroups)                             // 群组列表
				chat.GET("/single-chat-list", v1.GetSingleChatList)            // 单聊列表
				chat.GET("/group/:id/members", v1.ListGroupMembers)            // 获取群组成员
				chat.POST("/group/:id/member", v1.AddGroupMember)              // 添加群组成员
				chat.DELETE("/group/:id/member/:userId", v1.RemoveGroupMember) // 移除群组成员
				chat.PUT("/group/:id/member/:userId", v1.UpdateMemberRole)     // 更新成员角色

				// // 会话状态管理
				// chat.PUT("/conversation/:id/read", v1.MarkAsRead)       // 标记会话为已读
				// chat.PUT("/conversation/:id/pin", v1.PinConversation)   // 置顶/取消置顶会话
				// chat.PUT("/conversation/:id/mute", v1.MuteConversation) // 静音/取消静音会话
			}

			attendance := authed.Group("attendance")
			{
				// 打卡相关接口
				attendance.POST("/check-in", v1.CheckIn)                         // 上班打卡
				attendance.POST("/check-out", v1.CheckOut)                       // 下班打卡
				attendance.GET("/today", v1.GetTodayAttendance)                  // 获取今日打卡状态
				attendance.GET("/history", v1.GetAttendanceHistory)              // 获取打卡历史记录
				attendance.GET("/monthly-stats", v1.GetMonthlyAttendanceStats)   // 获取月度考勤统计
			}

			// 活动相关路由
			activityGroup := authed.Group("/activities")
			{
				// 基本的CRUD操作
				activityGroup.POST("", v1.CreateActivity)           // 创建活动
				activityGroup.GET("", v1.ListActivities)            // 获取活动列表
				activityGroup.GET("/:id", v1.GetActivityByID)       // 获取活动详情
				activityGroup.PUT("/:id", v1.UpdateActivity)        // 更新活动
				activityGroup.DELETE("/:id", v1.DeleteActivity)     // 删除活动
				
				// 活动状态管理
				activityGroup.PUT("/:id/status", v1.UpdateActivityStatus) // 更新活动状态（发布、取消等）
				
				// 活动参与者管理
				activityGroup.POST("/:id/join", v1.JoinActivity)              // 参加活动
				activityGroup.POST("/:id/leave", v1.LeaveActivity)            // 退出活动
				activityGroup.GET("/:id/participants", v1.ListActivityParticipants) // 获取参与者列表
				
				// 批量添加参与者
				activityGroup.POST("/:id/participants", v1.AddActivityParticipants) // 批量添加参与者
				
				// 附件管理
				activityGroup.POST("/:id/attachments", v1.UploadActivityAttachment) // 上传附件
				activityGroup.GET("/:id/attachments", v1.ListActivityAttachments)   // 获取附件列表
				activityGroup.DELETE("/:id/attachments/:attachmentId", v1.DeleteActivityAttachment) // 删除附件
				
				// 统计信息
				activityGroup.GET("/:id/statistics", v1.GetActivityStatistics) // 获取活动统计信息
				
				// 活动日历视图
				activityGroup.GET("/calendar", v1.GetActivityCalendar) // 获取活动日历

				// 活动评论
				activityGroup.POST("/:id/reviews", v1.CreateActivityReview) // 创建活动评论
				activityGroup.GET("/:id/reviews", v1.ListActivityReviews) // 获取活动评论列表
				activityGroup.PUT("/:id/reviews/:reviewId", v1.UpdateActivityReview) // 更新活动评论
				activityGroup.DELETE("/:id/reviews/:reviewId", v1.DeleteActivityReview) // 删除活动评论
			}

			// // 部门相关路由
			// departmentGroup := authed.Group("/departments")
			// {
			// 	departmentGroup.GET("", v1.ListDepartments) // 获取部门列表，活动创建时需要选择
			// 	// 其他部门相关路由...
			// }


			// 管理员及以上权限可访问的接口（角色ID <= 2）
			// 管理员及以上权限可访问的接口（角色ID <= 2）
			// admin := authed.Group("admin/")
			// admin.Use()
			// {
			// 	// admin.POST("user", v1.CreateUser)                      // 创建用户
			// 	// admin.GET("users", v1.GetUserList)                     // 获取用户列表
			// 	// admin.GET("user/:id", v1.GetUserByID)                  // 获取单个用户
			// 	// admin.PUT("user/:id", v1.UpdateUser)                   // 更新用户信息
			// 	// admin.DELETE("user/:id", v1.DeleteUser)                // 删除用户
			// }
		}
	}

	return r
}
